package com.hzw.saas.api.workspace;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hzw.saas.api.workspace.bo.WorkInstanceBo;
import com.hzw.saas.api.workspace.bo.WorkInstanceInfoBo;
import com.hzw.saas.common.config.util.PageParam;

/**
 * <p>
 * 用户工作实例表 服务类
 * </p>
 *
 * @author sonam
 * @since 2021-02-03
 */
public interface IWorkInstanceService {

    WorkInstanceBo getWorkInstanceById(String instId);

    /**
     * 创建工作实例
     *
     * @param userId
     * @param productId
     * @param repeat 是否重复开启
     * @return
     */
    WorkInstanceBo createWorkInstance(String userId, String productId, boolean repeat);

    /**
     * @param instId
     * @param time           过期时间,单位:秒
     */
    void setWorkInstanceExpire(String instId, long time);

    /**
     * 获取过期剩余时间
     *
     * @param instId
     * @return 剩余时间，秒
     */
    long getWorkInstanceExpire(String instId);

    /**
     * 获取当前用户的所有工作实例
     *
     * @param pageParam
     * @return
     */
    IPage<WorkInstanceBo> getAllWorkInstance(PageParam pageParam, String userId);

    /**
     * 开启一个工作实例
     *
     * @param instId
     */
    WorkInstanceBo startWorkInstance(String instId);

    /**
     * 停止一个工作实例
     *
     * @param instId
     */
    void stopWorkInstance(String instId);

    /**
     * 查看工作运行状态以及端口地址
     *
     * @param instId
     * @return
     */
    WorkInstanceInfoBo selectWorkInstance(String instId);

    /**
     * 回收一个工作实例
     *
     * @param instId
     */
    void deleteWorkInstance(String instId);

    /**
     * 强制删除一个工作实例（开启新的事务）
     * @param instId
     */
    void deleteWorkInstanceForce(String instId);

    /**
     * 获取当前工作实例数量
     *
     * @param userId 用户ID，为空则获取全部的工作实例数量
     * @return
     */
    int getWorkInstanceRunCount(String userId);

}
